package com.xzgj.fmmall.interceptor;

import com.auth0.jwt.impl.JWTParser;
import com.xzgj.fmmall.vo.ResStatus;
import com.xzgj.fmmall.vo.ResultVO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.UnsupportedJwtException;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
/**
 * 定义一个拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 在调用所有处理请求的方法之前被自动调用执行的方法
     *
     * 检查全局session对象中是否右uid数据，如果有则放行，如果没有重定向到登录页面
     * @param request
     * @param response
     * @param handler 处理器（url+Controller：映射）
     * @return 如果返回值为true，表示放行当前的请求，如果返回值为false，表示拦截当前的请求，
     * @throws Exception
     */
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String method = request.getMethod();
//        if ("OPTIONS".equalsIgnoreCase(method)){
//            return true;
//        }
//        String token = request.getHeader("token");
//        if (token == null){
//            ResultVO resultVO = new ResultVO(ResStatus.OK,ResStatus.loginFail_NOT,null);
////            doResponse(response,resultVO);
//
//        }else {
//            try {
//
//                JWTParser parser = (JWTParser) Jwts.parser();
////                parser.setSignKey("caominglei");//解析token的singingKey必须和生成token时设置的密码一致
//                //如果token正确（密码正确，有效期内）则正常执行，否则抛出异常
////                Jwts<Claims> claimsJwts = parser.parseClaimsJwt(token);
//                return true;
//            }catch (ExpiredJwtException e){
//                ResultVO resultVO = new ResultVO(ResStatus.NO,ResStatus.loginFail_OVERTIME,null);
////            doResponse(response,resultVO);
//
//            }catch (UnsupportedJwtException e){
//                ResultVO resultVO = new ResultVO(ResStatus.NO,ResStatus.loginFail_TOKEN_ISNOTLEGAL,null);
////            doResponse(response,resultVO);
//
//            }catch (Exception e){
//                ResultVO resultVO = new ResultVO(ResStatus.NO,ResStatus.loginFail_NOT,null);
////            doResponse(response,resultVO);
//
//            }
//        }
//
    //        request对象来获取session对象
//    Object obj = request.getSession().getAttribute("uid");
//        if (obj == null){//说明用户没有登陆过系统，重定向到Login页面
//
//        response.sendRedirect("/web/login.html");
//        //结束后续的调用
//        return false;
//    }
//    //请求放行
//        return true;
//        return false;
//    }

    /**
     * zai ModelAndView对象返回之后被调用的方法
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    /**
     * 在整个请求所有关联的资源被执行完毕最后所执行的方法
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
